package com.opensourcebolivia.navidar.service;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import com.opensourcebolivia.navidar.modelo.Persona;

public enum PersonaDAO {
	
	INSTANCE;
	/*
	 * Lista de todos las Personas.
	 */
	public List<Persona> lista() {
		EntityManager em = EMFService.get().createEntityManager();
		// Read the existing entries
		Query q = em.createQuery("select m from Persona m");
		List<Persona> lista = q.getResultList();
		return lista;
	}

	/*
	 * Agrega una persona.
	 */
	public void add(String nombres, String apellidoP, String apellidoM) {
		synchronized (this) {
			EntityManager em = EMFService.get().createEntityManager();
			Persona nuevo = new Persona(nombres, apellidoP, apellidoM);
			em.persist(nuevo);
			em.close();
		}
	}

	/*
	 * Obtener todos los registros que contengan nombre y apellidos.
	 */
	public List<Persona> obtener(String nombres, String apellidoP, String apellidoM) {
		EntityManager em = EMFService.get().createEntityManager();
		Query q = em
				.createQuery("select t from Persona t where (t.nombres like :nombres) "
						+ "or (t.apellidoP like :apellidoP) "
						+ "or (t.apellidoM like :apellidoM) ");
		q.setParameter("nombres", nombres);
		q.setParameter("apellidoP", apellidoP);
		q.setParameter("apellidoM", apellidoM);

		List<Persona> lista = q.getResultList();
		return lista;
	}

	/*
	 * Eliminar registro.
	 */
	public void remove(long id) {
		EntityManager em = EMFService.get().createEntityManager();
		try {
			Persona obj = em.find(Persona.class, id);
			em.remove(obj);
		} finally {
			em.close();
		}
	}

}
